// PROGRAMA : IDCPCC01(ORIUNDO DO IDCPC001)  OPCAO: 'DEL'
// COPIA ORIG. : IDCPC001
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSPC - GERENCIA DA JUSTICA, SEGURANCA PUBLICA E
// CIDADANIA / INSTITUTO DE IDENTIFICACAO
// OBJETIVO : CONSULTA CADASTRO. OPCOES: 'CNO','CPT','CRG','CPF'
// : PARA OS DELEGADOS DE POLICIA CIVIL
// COPYCODE: IDCCC001.
// ATUALIZACOES DATA
// PROGRAMA : IDCPC001 22/09/1999
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : ALTERCAO DE TELA E ACERTO DE DATAS PARA O ANO 2000
// EM 01/10/1999
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpcc01A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctc001;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Idclc001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpcc01 OBJETIVO : CONSULTA CADASTRO. OPCOES: 'CNO','CPT','CRG','CPF' *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpcc01")
public class Idcpcc01 {
	// Views utilizadas
	DidCadastro didcad = new DidCadastro();
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	// Telas/relatorios utilizados
	Idcpcc01A idcpcc01A;
	Idctc001 idctc001;
	// Includes utilizados
	Idclc001 idclc001 = new Idclc001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idcpcc01 idcpcc01Anterior;
	String faseproc = "0";

	int nroReg = 1;
	// CONTROLE DE PAGAMENTO DO RG
	// private String chave = "";
	private String regA = "";

	private Idcpcc01A preMapas() {
		idcpcc01A = new Idcpcc01A(true, sessao);
		idctc001 = new Idctc001(true, sessao);
		idctc001.setDataCorrente(UtilBean.obtemDataDia());
		idctc001.setOperacao("CAD");
		idctc001.setConf("S");
		idcpcc01A.setDataCorrente(UtilBean.obtemDataDia());
		// Par�grafo: r0()
		return idcpcc01A;
	}

	public Idcpcc01(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Idcpcc01A idcpcc01A, Idctc001 idctc001) {
		try {
			main(idcpcc01A, idctc001);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Idcpcc01A pidcpcc01A, Idctc001 pidctc001) throws Exception {
		if (pidcpcc01A == null && pidctc001 == null) {
			primeiraVez = true;
			idcpcc01A = preMapas();
			idcpcc01A.setNavegar("../idcpcc01/executar");
			result.include("idcpcc01A", idcpcc01A);
			sessao.setAtributo("IDCPCC01", this);
			idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidcpcc01A, pidctc001);
		}

		idcpcc01A.receberTela(false, result);
		if (idcpcc01A.getOperacao().equals("FIM")) {
			Sispm001 sispm001 = new Sispm001(result, sessao);
			sispm001.executar(null, null, null);
			return;
		}
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			idcpcc01A.enviarMensagem(null, "");
			sessao.setAtributo("IDCPCC01", this);
			result.include("idcpcc01A", idcpcc01A);
			idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		if (faseproc.equals("1") && idctc001.getConf().equals("N")) {
			faseproc = "0";
			didcad.fecha();
			vwDidcad.fecha();
			sessao.setAtributo("IDCPCC01", this);
			result.include("idcpcc01A", idcpcc01A);
			idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}

		switch (idcpcc01A.getOperacao()) {
		case "CRG": {
			if (!idcpcc01A.getChave().trim().equals("")) {
				zera();
				didcad.consultaNumeroRg(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					idcpcc01A.enviarMensagem("chave", "");
					faseproc = "0";
					sessao.setAtributo("IDCPCC01", this);
					result.include("idcpcc01A", idcpcc01A);
					idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: crg()
			if (idcpcc01A.getChave().trim().equals("")) {
				regA = StringUtils.repeat("0", 60);
			}
			//
			if (vwDidcad.leituraNumeroRgMaiorig(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()))) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CRE": {
			// PESQUISA PELO RENAID
			if (!idcpcc01A.getChave().trim().equals("")) {
				didcad.consultaRenaid(UtilBean.subStr(idcpcc01A.getChave(), 0, 12));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpcc01A.enviarMensagem("chave", "NUMERO DO RENAID NAO ENCONTRADO");
					sessao.setAtributo("IDCPCC01", this);
					result.include("idcpcc01A", idcpcc01A);
					idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: cre()
			if (idcpcc01A.getChave().trim().equals("")) {
				idcpcc01A.setChave(StringUtils.repeat(" ", 60));
			}
			//
			if (vwDidcad.leituraRenaidMaiorig(UtilBean.subStr(idcpcc01A.getChave(), 0, 12).trim())) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CRA": {
			if (!idcpcc01A.getChave().trim().equals("")) {
				zera();
				didcad.consultaRegistroAnterior(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpcc01A.enviarMensagem("chave", "");
					sessao.setAtributo("IDCPCC01", this);
					result.include("idcpcc01A", idcpcc01A);
					idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: cra()
			if (idcpcc01A.getChave().trim().equals("")) {
				regA = StringUtils.repeat("0", 60);
			}
			//
			if (vwDidcad.leituraRegistroAnteriorMaiorig(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()))) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CNO": {
			// Par�grafo: cno()
			if (vwDidcad.leituraNomeIdentMaiorig(idcpcc01A.getChave())) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CPT": {
			if (!idcpcc01A.getChave().trim().equals("")) {
				zera();
				didcad.consultaNumeroProtocolo(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpcc01A.enviarMensagem("chave", "");
					sessao.setAtributo("IDCPCC01", this);
					result.include("idcpcc01A", idcpcc01A);
					idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: cpt()
			if (idcpcc01A.getChave().trim().equals("")) {
				regA = StringUtils.repeat("0", 60);
			}
			//
			if (vwDidcad.leituraNumeroProtocoloMaiorig(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()))) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		case "CPF": {
			if (!idcpcc01A.getChave().trim().equals("")) {
				zera();
				didcad.consultaNumeroCpf(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim().trim()));
				didcad.fecha();
				if (didcad.totalRegistros() == 0) {
					faseproc = "0";
					idcpcc01A.enviarMensagem("chave", "");
					sessao.setAtributo("IDCPCC01", this);
					result.include("idcpcc01A", idcpcc01A);
					idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			// Par�grafo: cpf()
			if (idcpcc01A.getChave().trim().equals("")) {
				regA = StringUtils.repeat("0", 60);
			}
			//
			if (vwDidcad.leituraNumeroCpfMaiorig(Long.parseLong(UtilBean.subStr(regA, 0, 13).trim()))) {
				maoNaRoda();
				idctc001.setMensagem("");
			} else {
				maoNaRoda();
				idctc001.setMensagem("�ltimo registro - Confirme para iniciar novamente!");
			}
			faseproc = "1";
			break;
		}
		default: {
			faseproc = "0";
			praFora();
		}
		}

		if (faseproc.equals("0")) {
			sessao.setAtributo("IDCPCC01", this);
			result.include("idcpcc01A", idcpcc01A);
			idcpcc01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		} else {
			sessao.setAtributo("IDCPCC01", this);
			result.include("idctc001", idctc001);
			idctc001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private void maoNaRoda() throws Exception {
		Idccc001 idccc001 = new Idccc001(result, sessao);
		idctc001 = idccc001.executar(vwDidcad);
		idctc001.setConf("S");
		praFora();
	}

	private void praFora() {
		if (idctc001.getOperacao().equals("FIM") || idctc001.getOperacao().equals("   ")) {
			Sispm001 sispm001 = new Sispm001(result, sessao);
			sispm001.executar(null, null, null);
			return;
		}
	} // IF NOT OPERACAO = 'CRG" || OPERACAO.equals("CNO" ||
		// OPERACAO.equals("CPT"
		// || OPERACAO.equals("CPF" || OPERACAO.equals("CRA'
		// || .equals("CRE'
		// REINPUT 'OPCAO INVALIDA' ALARM
		// END-IF

	private void zera() {
		regA = idcpcc01A.getChave();
		regA = StringUtils.leftPad(regA, 13, '0');
	} // SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:" *ERROR-NR
		// "    LINHA:" *ERROR-LINE " PROGRAMA:" idcpcc01A.getNomeClasse()
		// idctc001.getNomeClasse() "!");

	private void restaurarEstados(Idcpcc01A pidcpcc01A, Idctc001 pidctc001) {
		this.idcpcc01Anterior = (Idcpcc01) sessao.getAtributo("IDCPCC01");
		if (pidcpcc01A != null) {
			idcpcc01A = pidcpcc01A;
		} else {
			idcpcc01A = this.idcpcc01Anterior.idcpcc01A;
		}
		idcpcc01A.setSessao(sessao);
		if (pidctc001 != null) {
			idctc001 = pidctc001;
		} else {
			idctc001 = this.idcpcc01Anterior.idctc001;
		}
		idctc001.setSessao(sessao);
		this.faseproc = this.idcpcc01Anterior.faseproc;
		this.vwDidcad = this.idcpcc01Anterior.vwDidcad;
	}
}
